/**
 * es5创建类和继承=》构造函数
 */
// 父类
function Parent (name) {
  // 实例属性和方法
  this.name = name
}

// 静态属性定义：不需要初始化new=>直接使用
// 语法：类名.xxx = xxx

Parent.str = 'str'
Parent.getStr = function () {
  console.log(this.str)
}



// 原型方法
Parent.prototype.getName = function () {
  console.log(this.name)
}

// 继承
// 子类
function Child (name) {
  // 1. 父类的实例属性
  Parent.call(this, name)
}
// 2. 继承原型方法
// Child.prototype = new Parent()
Child.prototype = Object.create(Parent.prototype, {
  constructor: {
    value: Child
  }
})

// 测试
var chi1 = new Child('小红')
console.log(chi1)

/**
 * es6创建类和继承 =》class => 是构造函数的语法糖
 */
// 父类
class Par {
  constructor(name) {
    // 实例属性
    this.name = name
  }
  // 原型方法
  getName () {
    console.log(this.name)
  }

}

//  测试
// const par = new Par('小刚')
// console.log(par)

// es6 继承
// 子类
class Chi extends Par {
  constructor(name) {
    super(name)
    // 子类自己的属性
    this.age = 28
    this.sss = 'sss'
  }

  // 定义实例属性和方法：this.xx=xx=》语法糖
  test = 1900
  str = 'tsr'
  fnc = () => {
    console.log(this.test)
  }

  // 原型上定义的方法 =》类名.prototype.fn=function
  getAge () {
    console.log(this.age)
  }

  // 2定义静态属性和方法
  static stb = 100
  static getStb = function () {
    console.log(this.stb)
  }
}
// 1定义静态属性和方法
Chi.str = 'str'
Chi.getStr = function () {
  console.log(this.str, this.stb)
}
// 测试继承
var chi2 = new Chi('特朗普！')
console.log(chi2)


